{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6e8c976e",
   "metadata": {},
   "source": [
    "## 使用xgboost工具包实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "f408ecdf",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn import metrics\n",
    "from sklearn.model_selection import train_test_split\n",
    "import xgboost as xgb\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86b4e79a",
   "metadata": {},
   "source": [
    "### 1. 数据集准备\n",
    "* 读取 csv文件(TODO:你自己的数据集)\n",
    "* 保存为 训练集(train_x train_y)、测试集(test_x test_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "2c85b0d6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1680</th>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>188</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1209</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1396</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4307</th>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2550</th>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>537</th>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1220</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4271</th>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3520 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      label\n",
       "70        1\n",
       "1680      9\n",
       "188       1\n",
       "1209      7\n",
       "1396      7\n",
       "...     ...\n",
       "4307     22\n",
       "2550     13\n",
       "537       3\n",
       "1220      7\n",
       "4271     22\n",
       "\n",
       "[3520 rows x 1 columns]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"./celldata_fine_tuning.csv\")\n",
    "\n",
    "data=df.iloc[:,1:]\n",
    "\n",
    "target=df.iloc[:,:-5]\n",
    "train_x, test_x, train_y, test_y = train_test_split(data,target,test_size=0.2,random_state=7)\n",
    "\n",
    "train_y"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a0b63ba",
   "metadata": {},
   "source": [
    "### 2. xgboost模型配置 \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "649a589c",
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "DataFrame.dtypes for data must be int, float, bool or category.  When\ncategorical type is supplied, DMatrix parameter `enable_categorical` must\nbe set to `True`. Invalid columns:adhesion",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-26-94344756ba92>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m# xgboost模型初始化设置\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdtrain\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxgb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDMatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_x\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrain_y\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mdtest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxgb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDMatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_x\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mwatchlist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtrain\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'train'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/xgboost/core.py\u001b[0m in \u001b[0;36minner_f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    530\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    531\u001b[0m             \u001b[0mkwargs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0marg\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 532\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    533\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    534\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0minner_f\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/xgboost/core.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, label, weight, base_margin, missing, silent, feature_names, feature_types, nthread, group, qid, label_lower_bound, label_upper_bound, feature_weights, enable_categorical)\u001b[0m\n\u001b[1;32m    641\u001b[0m             \u001b[0;32mreturn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    642\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 643\u001b[0;31m         handle, feature_names, feature_types = dispatch_data_backend(\n\u001b[0m\u001b[1;32m    644\u001b[0m             \u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    645\u001b[0m             \u001b[0mmissing\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmissing\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/xgboost/data.py\u001b[0m in \u001b[0;36mdispatch_data_backend\u001b[0;34m(data, missing, threads, feature_names, feature_types, enable_categorical)\u001b[0m\n\u001b[1;32m    894\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0m_from_tuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmissing\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mthreads\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeature_names\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeature_types\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    895\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0m_is_pandas_df\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 896\u001b[0;31m         return _from_pandas_df(data, enable_categorical, missing, threads,\n\u001b[0m\u001b[1;32m    897\u001b[0m                                feature_names, feature_types)\n\u001b[1;32m    898\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0m_is_pandas_series\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/xgboost/data.py\u001b[0m in \u001b[0;36m_from_pandas_df\u001b[0;34m(data, enable_categorical, missing, nthread, feature_names, feature_types)\u001b[0m\n\u001b[1;32m    343\u001b[0m     \u001b[0mfeature_types\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mList\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    344\u001b[0m ) -> Tuple[ctypes.c_void_p, FeatureNames, Optional[List[str]]]:\n\u001b[0;32m--> 345\u001b[0;31m     data, feature_names, feature_types = _transform_pandas_df(\n\u001b[0m\u001b[1;32m    346\u001b[0m         \u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menable_categorical\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeature_names\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeature_types\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    347\u001b[0m     )\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/xgboost/data.py\u001b[0m in \u001b[0;36m_transform_pandas_df\u001b[0;34m(data, enable_categorical, feature_names, feature_types, meta, meta_type)\u001b[0m\n\u001b[1;32m    281\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mdtype\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtypes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    282\u001b[0m     ):\n\u001b[0;32m--> 283\u001b[0;31m         \u001b[0m_invalid_dataframe_dtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    284\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    285\u001b[0m     \u001b[0;31m# handle feature names\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/xgboost/data.py\u001b[0m in \u001b[0;36m_invalid_dataframe_dtype\u001b[0;34m(data)\u001b[0m\n\u001b[1;32m    245\u001b[0m \u001b[0mcategorical\u001b[0m \u001b[0mtype\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0msupplied\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mDMatrix\u001b[0m \u001b[0mparameter\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0menable_categorical\u001b[0m\u001b[0;31m`\u001b[0m \u001b[0mmust\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    246\u001b[0m be set to `True`.\"\"\" + err\n\u001b[0;32m--> 247\u001b[0;31m     \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    248\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    249\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mValueError\u001b[0m: DataFrame.dtypes for data must be int, float, bool or category.  When\ncategorical type is supplied, DMatrix parameter `enable_categorical` must\nbe set to `True`. Invalid columns:adhesion"
     ]
    }
   ],
   "source": [
    "# xgboost模型初始化设置\n",
    "dtrain=xgb.DMatrix(train_x,label=train_y)\n",
    "\n",
    "dtest=xgb.DMatrix(test_x)\n",
    "watchlist = [(dtrain,'train')]\n",
    "\n",
    "# booster: 包括常规参数、模型参数、学习任务参数\n",
    "params={\n",
    "        # 常规参数\n",
    "        'booster':'gbtree',             #以决策树为基分类器\n",
    "        'nthread':8, #使用8个cpu进行计算\n",
    "        'eta': 0.025,\n",
    "        'seed':0,\n",
    "        \n",
    "        #模型参数\n",
    "        'max_depth':5,                  # 树的深度\n",
    "        'subsample':0.75,               #每棵树随机进行数据采样比例\n",
    "        'colsample_bytree':0.75,        #用来控制每棵随机采样的列数的占比(每一列是一个特征)。 典型值：0.5-1\n",
    "        'min_child_weight':2,           # 最小叶子节点样本权重和\n",
    "\n",
    "        \n",
    "        # 学习任务参数\n",
    "        'gamma':0.15,                   # 惩罚项系数\n",
    "        'lambda':10,                    # L2正则化系数\n",
    "        'objective': 'binary:logistic', #定义损失函数 二元分类问题('multi:softmax' #多元分类)\n",
    "        'eval_metric': 'auc',           # 评价指标\n",
    "        'learning_rate' : 0.01          #学习率\n",
    "\n",
    "       }\n",
    "num_boost_round = 50 #构建树的数目"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41160342",
   "metadata": {},
   "source": [
    "### 3. 训练与结果展示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "ea9f3bb6",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-auc:0.80611\n",
      "[1]\ttrain-auc:0.82055\n",
      "[2]\ttrain-auc:0.82210\n",
      "[3]\ttrain-auc:0.82131\n",
      "[4]\ttrain-auc:0.84688\n",
      "[5]\ttrain-auc:0.84231\n",
      "[6]\ttrain-auc:0.84567\n",
      "[7]\ttrain-auc:0.84684\n",
      "[8]\ttrain-auc:0.85429\n",
      "[9]\ttrain-auc:0.85965\n",
      "[10]\ttrain-auc:0.86047\n",
      "[11]\ttrain-auc:0.85994\n",
      "[12]\ttrain-auc:0.86222\n",
      "[13]\ttrain-auc:0.86700\n",
      "[14]\ttrain-auc:0.86897\n",
      "[15]\ttrain-auc:0.87211\n",
      "[16]\ttrain-auc:0.87415\n",
      "[17]\ttrain-auc:0.87548\n",
      "[18]\ttrain-auc:0.87834\n",
      "[19]\ttrain-auc:0.87707\n",
      "[20]\ttrain-auc:0.87806\n",
      "[21]\ttrain-auc:0.87921\n",
      "[22]\ttrain-auc:0.88103\n",
      "[23]\ttrain-auc:0.88129\n",
      "[24]\ttrain-auc:0.88235\n",
      "[25]\ttrain-auc:0.88143\n",
      "[26]\ttrain-auc:0.88031\n",
      "[27]\ttrain-auc:0.88038\n",
      "[28]\ttrain-auc:0.88051\n",
      "[29]\ttrain-auc:0.87971\n",
      "[30]\ttrain-auc:0.87980\n",
      "[31]\ttrain-auc:0.88258\n",
      "[32]\ttrain-auc:0.88272\n",
      "[33]\ttrain-auc:0.88272\n",
      "[34]\ttrain-auc:0.88256\n",
      "[35]\ttrain-auc:0.88236\n",
      "[36]\ttrain-auc:0.88372\n",
      "[37]\ttrain-auc:0.88391\n",
      "[38]\ttrain-auc:0.88473\n",
      "[39]\ttrain-auc:0.88490\n",
      "[40]\ttrain-auc:0.88450\n",
      "[41]\ttrain-auc:0.88457\n",
      "[42]\ttrain-auc:0.88529\n",
      "[43]\ttrain-auc:0.88530\n",
      "[44]\ttrain-auc:0.88592\n",
      "[45]\ttrain-auc:0.88653\n",
      "[46]\ttrain-auc:0.88584\n",
      "[47]\ttrain-auc:0.88651\n",
      "[48]\ttrain-auc:0.88635\n",
      "[49]\ttrain-auc:0.88580\n",
      "Precesion: 0.8158\n",
      "Recall: 0.5439\n",
      "F1-score: 0.6526\n",
      "Accuracy: 0.7857\n",
      "AUC: 0.8699\n",
      "测试集每个样本的得分\n",
      " [0.36583474 0.58750075 0.46128064 0.38076603 0.45140737 0.4846999\n",
      " 0.3744269  0.4182581  0.5575738  0.38492715 0.5787683  0.3795635\n",
      " 0.5115442  0.5663918  0.43649822 0.41047338 0.40571654 0.42503658\n",
      " 0.42501557 0.42493287 0.4930601  0.39653578 0.5507907  0.542388\n",
      " 0.3754657  0.39262465 0.37250876 0.5230346  0.46502498 0.40558454\n",
      " 0.45755726 0.42571282 0.42400113 0.4869221  0.36775392 0.4742167\n",
      " 0.47165516 0.40397015 0.5716118  0.47236335 0.5112806  0.5392989\n",
      " 0.4884916  0.36425823 0.3886204  0.42031613 0.4754346  0.5014132\n",
      " 0.42958456 0.49889937 0.37765613 0.3676195  0.46902406 0.43410492\n",
      " 0.5537028  0.47644943 0.4060496  0.37488684 0.45058066 0.4364562\n",
      " 0.4204439  0.5289543  0.41046646 0.51729023 0.51482713 0.5235556\n",
      " 0.42027238 0.507242   0.5842777  0.50007784 0.5737385  0.54795897\n",
      " 0.39639232 0.43517557 0.4346048  0.41080505 0.40763143 0.41925323\n",
      " 0.36659184 0.42774644 0.41606542 0.42777687 0.41848394 0.37488052\n",
      " 0.42998546 0.47430068 0.5820264  0.42493674 0.499703   0.3831537\n",
      " 0.50124466 0.38948828 0.539665   0.4628076  0.44402173 0.46345255\n",
      " 0.5316978  0.37093842 0.5359382  0.506794   0.5015892  0.3976446\n",
      " 0.44624767 0.41000202 0.39842215 0.45623168 0.3973278  0.42615002\n",
      " 0.44377947 0.5553023  0.37291658 0.5338134  0.42433503 0.38082552\n",
      " 0.4950952  0.47015527 0.3845695  0.43720943 0.52291244 0.4808689\n",
      " 0.4098371  0.3725123  0.4302002  0.36425823 0.36659184 0.53665745\n",
      " 0.36425823 0.5119036  0.37273583 0.40047994 0.36949494 0.5782039\n",
      " 0.37291658 0.37135747 0.48617223 0.36425823 0.37135747 0.4566718\n",
      " 0.36425823 0.56645924 0.42896834 0.44563156 0.49574932 0.5163205\n",
      " 0.39184484 0.48123354 0.46462226 0.39866188 0.571406   0.49644464\n",
      " 0.41310284 0.45258945 0.3937943  0.36583474]\n",
      "测试集每棵树所属的节点数\n",
      " [[ 3.  7.  7. ...  8.  1.  7.]\n",
      " [11.  6.  6. ... 21. 13. 12.]\n",
      " [24.  6. 12. ... 19. 18.  5.]\n",
      " ...\n",
      " [ 3. 16. 15. ...  8.  5. 12.]\n",
      " [ 3. 15. 15. ...  8.  1.  7.]\n",
      " [ 3.  7.  7. ...  8.  1.  7.]]\n",
      "特征的重要性\n",
      " [[-0.00999836 -0.1502813  -0.00079675 ...  0.00048402 -0.07795415\n",
      "  -0.21099186]\n",
      " [ 0.01418928  0.31657967 -0.00510171 ...  0.03885951  0.1003997\n",
      "  -0.21099186]\n",
      " [ 0.03292648  0.11496227 -0.00144179 ...  0.03207004  0.08080795\n",
      "  -0.21099186]\n",
      " ...\n",
      " [-0.01067008 -0.00654797 -0.00621915 ...  0.10016389 -0.09090956\n",
      "  -0.21099186]\n",
      " [-0.01282642 -0.17331672 -0.00386838 ...  0.06235296 -0.09854004\n",
      "  -0.21099186]\n",
      " [-0.01107196 -0.14974895 -0.00077224 ... -0.00387382 -0.07974508\n",
      "  -0.21099186]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 建模与预测：50棵树\n",
    "bst=xgb.train(params,dtrain,num_boost_round=num_boost_round,evals=watchlist)\n",
    "ypred=bst.predict(dtest)\n",
    " \n",
    "# 设置阈值、评价指标\n",
    "y_pred = (ypred >= 0.5)*1\n",
    "print ('Precesion: %.4f' %metrics.precision_score(test_y,y_pred))\n",
    "print ('Recall: %.4f' % metrics.recall_score(test_y,y_pred))\n",
    "print ('F1-score: %.4f' %metrics.f1_score(test_y,y_pred))\n",
    "print ('Accuracy: %.4f' % metrics.accuracy_score(test_y,y_pred))\n",
    "print ('AUC: %.4f' % metrics.roc_auc_score(test_y,ypred))\n",
    "\n",
    "ypred = bst.predict(dtest)\n",
    "print(\"测试集每个样本的得分\\n\",ypred)\n",
    "ypred_leaf = bst.predict(dtest, pred_leaf=True)\n",
    "print(\"测试集每棵树所属的节点数\\n\",ypred_leaf)\n",
    "ypred_contribs = bst.predict(dtest, pred_contribs=True)\n",
    "print(\"特征的重要性\\n\",ypred_contribs )\n",
    "\n",
    "plt.rcParams['font.family'] = 'Microsoft YaHei' #更改字体\n",
    "xgb.plot_importance(bst,height=0.8,title='影响糖尿病的重要特征', ylabel='特征')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4631b006",
   "metadata": {},
   "source": [
    "### 4. 一些其他的代码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "78ba3e5c",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Arial', 'Arial', 'Arial', 'Arial', 'Arial', 'Arial', 'Arial', 'Arial', 'Arial', 'Bahnschrift', 'Book Antiqua', 'Book Antiqua', 'Book Antiqua', 'Book Antiqua', 'Bookman Old Style', 'Bookman Old Style', 'Bookman Old Style', 'Bookman Old Style', 'Bookshelf Symbol 7', 'Bradley Hand ITC', 'Calibri', 'Calibri', 'Calibri', 'Calibri', 'Calibri', 'Calibri', 'Cambria', 'Cambria', 'Cambria', 'Cambria', 'Candara', 'Candara', 'Candara', 'Candara', 'Candara', 'Candara', 'Century', 'Century Gothic', 'Century Gothic', 'Century Gothic', 'Century Gothic', 'Comic Sans MS', 'Comic Sans MS', 'Comic Sans MS', 'Comic Sans MS', 'Consolas', 'Consolas', 'Consolas', 'Consolas', 'Constantia', 'Constantia', 'Constantia', 'Constantia', 'Corbel', 'Corbel', 'Corbel', 'Corbel', 'Corbel', 'Corbel', 'Courier New', 'Courier New', 'Courier New', 'Courier New', 'DejaVu Sans', 'DejaVu Sans', 'DejaVu Sans', 'DejaVu Sans', 'DejaVu Sans Display', 'DejaVu Sans Mono', 'DejaVu Sans Mono', 'DejaVu Sans Mono', 'DejaVu Sans Mono', 'DejaVu Serif', 'DejaVu Serif', 'DejaVu Serif', 'DejaVu Serif', 'DejaVu Serif Display', 'DengXian', 'DengXian', 'DengXian', 'Dubai', 'Dubai', 'Dubai', 'Dubai', 'Ebrima', 'Ebrima', 'Euclid', 'Euclid', 'Euclid', 'Euclid', 'Euclid Extra', 'Euclid Extra', 'Euclid Fraktur', 'Euclid Fraktur', 'Euclid Math One', 'Euclid Math One', 'Euclid Math Two', 'Euclid Math Two', 'Euclid Symbol', 'Euclid Symbol', 'Euclid Symbol', 'Euclid Symbol', 'FZShuTi', 'FZYaoTi', 'FangSong', 'Fences', 'Franklin Gothic Medium', 'Franklin Gothic Medium', 'Freestyle Script', 'French Script MT', 'Gabriola', 'Gadugi', 'Gadugi', 'Garamond', 'Garamond', 'Garamond', 'Georgia', 'Georgia', 'Georgia', 'Georgia', 'HGB1X_CNKI', 'HGB1_CNKI', 'HGB2X_CNKI', 'HGB2_CNKI', 'HGB3X_CNKI', 'HGB3_CNKI', 'HGB4X_CNKI', 'HGB4_CNKI', 'HGB5X_CNKI', 'HGB5_CNKI', 'HGB6X_CNKI', 'HGB6_CNKI', 'HGB7X_CNKI', 'HGB7_CNKI', 'HGB8X_CNKI', 'HGB8_CNKI', 'HGBD_CNKI', 'HGBKBX_CNKI', 'HGBKB_CNKI', 'HGBKHX_CNKI', 'HGBKH_CNKI', 'HGBS1_CNKI', 'HGBS2_CNKI', 'HGBS_CNKI', 'HGBTH_CNKI', 'HGBTS_CNKI', 'HGBX_CNKI', 'HGBZ_CNKI', 'HGCH_CNKI', 'HGCUH_CNKI', 'HGCY_CNKI', 'HGDBS_CNKI', 'HGDGY_CNKI', 'HGDH2_CNKI', 'HGDH_CNKI', 'HGDYS_CNKI', 'HGDY_CNKI', 'HGF1X_CNKI', 'HGF1_CNKI', 'HGF2X_CNKI', 'HGF2_CNKI', 'HGF3_CNKI', 'HGF4X_CNKI', 'HGF4_CNKI', 'HGF5X_CNKI', 'HGF5_CNKI', 'HGF6X_CNKI', 'HGF6_CNKI', 'HGF7X_CNKI', 'HGF7_CNKI', 'HGF8_CNKI', 'HGF9X_CNKI', 'HGF9_CNKI', 'HGFS1_CNKI', 'HGFS2_CNKI', 'HGFSH_CNKI', 'HGFS_CNKI', 'HGFX_CNKI', 'HGFZ_CNKI', 'HGGG_CNKI', 'HGH1X_CNKI', 'HGH1_CNKI', 'HGH2X_CNKI', 'HGH2_CNKI', 'HGH3X_CNKI', 'HGH3_CNKI', 'HGH4X_CNKI', 'HGH4_CNKI', 'HGH5X_CNKI', 'HGH5_CNKI', 'HGH6X_CNKI', 'HGH6_CNKI', 'HGH7X_CNKI', 'HGH7_CNKI', 'HGHB_CNKI', 'HGHD_CNKI', 'HGHP_CNKI', 'HGHT1_CNKI', 'HGHT2_CNKI', 'HGHT_CNKI', 'HGHUATI_CNKI', 'HGHX_CNKI', 'HGHZ_CNKI', 'HGKT1_CNKI', 'HGKT2_CNKI', 'HGKT_CNKI', 'HGKY_CNKI', 'HGLB_CNKI', 'HGLS_CNKI', 'HGMH_CNKI', 'HGNBS_CNKI', 'HGOCR_CNKI', 'HGPH_CNKI', 'HGPTY_CNKI', 'HGSS1_CNKI', 'HGSS2_CNKI', 'HGSS_CNKI', 'HGSXT_CNKI', 'HGTT_CNKI', 'HGTX_CNKI', 'HGWT_CNKI', 'HGWYS_CNKI', 'HGX1X_CNKI', 'HGX1_CNKI', 'HGXBS_CNKI', 'HGXC_CNKI', 'HGXF1_CNKI', 'HGXFX_CNKI', 'HGXFZ_CNKI', 'HGXH1_CNKI', 'HGXH_CNKI', 'HGXK_CNKI', 'HGXL_CNKI', 'HGXS_CNKI', 'HGXT_CNKI', 'HGXY_CNKI', 'HGY1_CNKI', 'HGY2_CNKI', 'HGY3_CNKI', 'HGY4_CNKI', 'HGYB_CNKI', 'HGYT1_CNKI', 'HGYT2_CNKI', 'HGYT_CNKI', 'HGYX_CNKI', 'HGZCS_CNKI', 'HGZDX_CNKI', 'HGZK_CNKI', 'HGZYT_CNKI', 'HGZY_CNKI', 'HoloLens MDL2 Assets', 'Impact', 'Ink Free', 'Javanese Text', 'Juice ITC', 'KaiTi', 'Kristen ITC', 'Leelawadee', 'Leelawadee', 'Leelawadee UI', 'Leelawadee UI', 'Leelawadee UI', 'LiSu', 'Lucida Console', 'Lucida Handwriting', 'Lucida Sans Unicode', 'MS Gothic', 'MS Reference Sans Serif', 'MS Reference Specialty', 'MT Extra', 'MT Extra Tiger', 'MV Boli', 'Malgun Gothic', 'Malgun Gothic', 'Malgun Gothic', 'Marlett', 'Microsoft Himalaya', 'Microsoft JhengHei', 'Microsoft JhengHei', 'Microsoft JhengHei', 'Microsoft New Tai Lue', 'Microsoft New Tai Lue', 'Microsoft PhagsPa', 'Microsoft PhagsPa', 'Microsoft Sans Serif', 'Microsoft Tai Le', 'Microsoft Tai Le', 'Microsoft Uighur', 'Microsoft Uighur', 'Microsoft YaHei', 'Microsoft YaHei', 'Microsoft YaHei', 'Microsoft Yi Baiti', 'MingLiU-ExtB', 'Mistral', 'Mongolian Baiti', 'Monotype Corsiva', 'Myanmar Text', 'Myanmar Text', 'Nirmala UI', 'Nirmala UI', 'Nirmala UI', 'Palatino Linotype', 'Palatino Linotype', 'Palatino Linotype', 'Palatino Linotype', 'Papyrus', 'Pristina', 'STCaiyun', 'STFangsong', 'STHupo', 'STIXGeneral', 'STIXGeneral', 'STIXGeneral', 'STIXGeneral', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXNonUnicode', 'STIXSizeFiveSym', 'STIXSizeFourSym', 'STIXSizeFourSym', 'STIXSizeOneSym', 'STIXSizeOneSym', 'STIXSizeThreeSym', 'STIXSizeThreeSym', 'STIXSizeTwoSym', 'STIXSizeTwoSym', 'STKaiti', 'STLiti', 'STSong', 'STXihei', 'STXingkai', 'STXinwei', 'STZhongsong', 'Segoe MDL2 Assets', 'Segoe Print', 'Segoe Print', 'Segoe Script', 'Segoe Script', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI', 'Segoe UI Emoji', 'Segoe UI Historic', 'Segoe UI Symbol', 'SimHei', 'SimSun', 'SimSun-ExtB', 'Sitka Small', 'Sitka Small', 'Sitka Small', 'Sitka Small', 'Sylfaen', 'Symbol', 'Symbol Tiger', 'Symbol Tiger Expert', 'Tahoma', 'Tahoma', 'Tempus Sans ITC', 'Tiger', 'Tiger Expert', 'Times New Roman', 'Times New Roman', 'Times New Roman', 'Times New Roman', 'Trebuchet MS', 'Trebuchet MS', 'Trebuchet MS', 'Trebuchet MS', 'Verdana', 'Verdana', 'Verdana', 'Verdana', 'Webdings', 'Wingdings', 'Wingdings 2', 'Wingdings 3', 'YouYuan', 'Yu Gothic', 'Yu Gothic', 'Yu Gothic', 'Yu Gothic', 'cmb10', 'cmex10', 'cmmi10', 'cmr10', 'cmss10', 'cmsy10', 'cmtt10']\n"
     ]
    }
   ],
   "source": [
    "## 更改字体解决中文出现方框问题\n",
    "\n",
    "import matplotlib\n",
    "\n",
    "fonts = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])\n",
    "print(fonts) #查看字体列表\n",
    "\n",
    "plt.rcParams['font.family'] = 'Microsoft YaHei' #更改字体"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
